Skill

Spies ব্যবহার করে ফাংশন টেস্ট করা

জ্যাসমিনজেএস (JasmineJS) - Web Development

378

JasmineJS এ Spies একটি শক্তিশালী টুল যা আপনাকে ফাংশনের আচরণ পর্যবেক্ষণ (spy) করতে সহায়তা করে। Spies ব্যবহার করে আপনি যাচাই করতে পারেন যে কোনো ফাংশন কল করা হয়েছে কিনা, কতবার কল করা হয়েছে, এবং কলের প্যারামিটার কী ছিল। এটি বিশেষভাবে উপকারী যখন আপনি কোন নির্দিষ্ট ফাংশনের পারফরম্যান্স বা ইন্টারঅ্যাকশন টেস্ট করতে চান, যেমন কলের সংখ্যা বা আর্গুমেন্ট যাচাই করা।


Spies কি?

Spies হলো JasmineJS এর একটি বিশেষ বৈশিষ্ট্য, যার মাধ্যমে আপনি একটি ফাংশনের কল ট্র্যাক করতে পারেন। আপনি একটি ফাংশনের spyOn() মেথড ব্যবহার করে তার ওপর নজর রাখতে পারেন, এবং এরপর তা পরীক্ষা করতে পারেন যে ওই ফাংশনটি কতবার কল হয়েছে বা তার আর্গুমেন্ট কী ছিল।


Spies ব্যবহারের উদাহরণ

ধরা যাক, আমাদের একটি ফাংশন আছে যা অন্য একটি ফাংশন কল করে এবং আমরা পরীক্ষা করতে চাই সেই কলটি সঠিকভাবে হয়েছে কিনা।

১. স্পাই তৈরি করা

প্রথমে, spyOn() মেথড ব্যবহার করে একটি ফাংশনের স্পাই তৈরি করা হয়। এরপর and.callThrough() বা and.returnValue() এর মাধ্যমে আপনি সেই স্পাইয়ের আচরণ নির্ধারণ করতে পারেন।

// ফাংশন যেটি আমরা টেস্ট করতে চাই
function greet(name) {
  console.log("Hello, " + name);
}

// স্পাই তৈরি করা
describe("greet function", function() {
  it("should call console.log with the correct message", function() {
    spyOn(console, 'log');  // console.log ফাংশনের স্পাই তৈরি করা

    greet("John");

    expect(console.log).toHaveBeenCalledWith("Hello, John");  // যাচাই করা যে সঠিক আর্গুমেন্ট সহ কল হয়েছে
  });
});

এখানে:

  • spyOn(console, 'log'): এটি console.log ফাংশনের স্পাই তৈরি করছে।
  • expect(console.log).toHaveBeenCalledWith("Hello, John"): এটি যাচাই করছে যে console.log ফাংশনটি "Hello, John" আর্গুমেন্ট সহ কল করা হয়েছে।

Spies এর অন্যান্য ব্যবহারের উদাহরণ

২. ফাংশনের কল সংখ্যা পরীক্ষা করা

Spies ব্যবহার করে আপনি একটি ফাংশন কতবার কল হয়েছে তাও যাচাই করতে পারেন।

describe("call count", function() {
  it("should call the function once", function() {
    const spyFunction = jasmine.createSpy('spyFunction');

    spyFunction();  // ফাংশনটি একবার কল করা

    expect(spyFunction).toHaveBeenCalledTimes(1);  // যাচাই করা যে ফাংশনটি একবার কল হয়েছে
  });
});

এখানে:

  • jasmine.createSpy('spyFunction'): এটি একটি স্পাই ফাংশন তৈরি করছে।
  • expect(spyFunction).toHaveBeenCalledTimes(1): এটি যাচাই করছে যে spyFunction ফাংশনটি একবার কল করা হয়েছে।

৩. স্পাইয়ের মাধ্যমে রিটার্ন ভ্যালু নির্ধারণ করা

Spies ব্যবহার করে আপনি কোনো ফাংশনের রিটার্ন ভ্যালুও নিয়ন্ত্রণ করতে পারেন। এইভাবে আপনি ফাংশনের রিটার্ন ভ্যালু টেস্ট করতে পারবেন।

describe("mocking return value", function() {
  it("should return the mocked value", function() {
    const spyFunction = jasmine.createSpy('spyFunction').and.returnValue(10);

    const result = spyFunction();  // ফাংশনটি কল করা

    expect(result).toBe(10);  // যাচাই করা যে রিটার্ন ভ্যালু ১০
  });
});

এখানে:

  • and.returnValue(10): এটি স্পাই ফাংশনটির রিটার্ন ভ্যালু হিসেবে ১০ ফেরত দেয়।

৪. স্পাইয়ের মাধ্যমে কল প্যারামিটার যাচাই করা

Spies ব্যবহার করে আপনি কলের আর্গুমেন্টও যাচাই করতে পারেন।

describe("checking parameters", function() {
  it("should pass correct arguments to the spy function", function() {
    const spyFunction = jasmine.createSpy('spyFunction');

    spyFunction(2, 3);  // ফাংশনটি কল করা

    expect(spyFunction).toHaveBeenCalledWith(2, 3);  // যাচাই করা যে সঠিক প্যারামিটার পাস করা হয়েছে
  });
});

এখানে:

  • expect(spyFunction).toHaveBeenCalledWith(2, 3): এটি যাচাই করছে যে spyFunction ফাংশনটি ২ এবং ৩ আর্গুমেন্ট সহ কল করা হয়েছে।

Spies এর সুবিধা

  • ফাংশন আচরণ ট্র্যাকিং: Spies এর মাধ্যমে আপনি দেখতে পারেন একটি নির্দিষ্ট ফাংশন কতবার কল হয়েছে এবং কী আর্গুমেন্ট দিয়ে কল হয়েছে।
  • রিটার্ন ভ্যালু মকিং: Spies ব্যবহার করে আপনি একটি ফাংশনের রিটার্ন ভ্যালু পরিবর্তন করতে পারেন এবং সেটি টেস্ট করতে পারেন।
  • এবং আরও অনেক কিছু: কল প্যারামিটার, কল সংখ্যা, এবং আরও অন্যান্য ফাংশন আচরণ ট্র্যাক করা সম্ভব।

সারাংশ

JasmineJS এর Spies একটি শক্তিশালী ফিচার যা ফাংশন কল ট্র্যাকিং, কল সংখ্যা, প্যারামিটার যাচাই এবং রিটার্ন ভ্যালু মকিং এর জন্য ব্যবহৃত হয়। Spies ব্যবহার করে আপনি ফাংশনগুলির ওপর সম্পূর্ণ নিয়ন্ত্রণ রাখতে পারেন এবং নির্দিষ্ট আচরণ নিশ্চিত করতে পারেন। এটি আপনার টেস্টিং প্রক্রিয়াকে আরও শক্তিশালী এবং নমনীয় করে তোলে, বিশেষত যখন আপনি ফাংশনের অভ্যন্তরীণ কার্যকলাপ পর্যবেক্ষণ করতে চান।

Content added By

JasmineJS এ Spies এমন একটি টুল যা আপনাকে ফাংশনের আচরণ ট্র্যাক করতে এবং এটি কিভাবে কার্যকর হচ্ছে তা পরীক্ষা করতে সহায়তা করে। এটি বিশেষভাবে ব্যবহৃত হয় যখন আপনি একটি ফাংশন বা মেথডের আউটপুট বা আচরণ নিরীক্ষণ করতে চান, কিন্তু সেই ফাংশন বা মেথডটি সরাসরি পরীক্ষা করতে চান না। Spies একরকম "নকল" ফাংশন হিসেবে কাজ করে, যা আপনার কোডের মধ্যে কার্যকরী ফাংশনের পরিবর্তে রাখা হয় এবং তার কার্যকলাপ পরীক্ষা করা যায়।


Spies এর বৈশিষ্ট্য

  • ফাংশন ট্র্যাকিং: Spies ব্যবহার করে আপনি যে কোনো ফাংশন বা মেথডের কল ট্র্যাক করতে পারেন, যেমন এটি কখন এবং কতবার কল করা হয়েছে, এর আর্গুমেন্ট কী ছিল, এবং এটি কী রিটার্ন করেছে।
  • অ্যাসারশন (Assertion) তৈরি করা: Spies এর মাধ্যমে আপনি যাচাই করতে পারেন যে, একটি ফাংশন প্রত্যাশিতভাবে একাধিক বার কল হয়েছে কিনা, এবং এটি সঠিক আর্গুমেন্টের সাথে কল করা হয়েছে কিনা।
  • নকল ফাংশন তৈরি: Jasmine এর spyOn() ফাংশনটি ব্যবহার করে আপনি একটি মেথডের আচরণ নকল (mock) করে ফেলতে পারেন এবং এই আচরণ পরবর্তী টেস্টে পরীক্ষা করতে পারেন।

Spies এর ব্যবহার

JasmineJS এ Spies তৈরি করতে spyOn() ফাংশন ব্যবহার করা হয়। এর মাধ্যমে আপনি কোনো অবজেক্টের মেথড স্পাই করতে পারেন এবং সেই মেথডের কল ট্র্যাক করতে পারেন।

spyOn() এর সাধারণ কাঠামো:

spyOn(object, 'methodName');
  • object: এটি সেই অবজেক্ট যার মেথড আপনি স্পাই করতে চান।
  • methodName: এটি ঐ মেথডের নাম যার ওপর স্পাই করা হবে।

উদাহরণ:

describe("Spies Example", function() {
  it("should spy on the method and track its calls", function() {
    const user = {
      getName: function() {
        return "John Doe";
      }
    };

    // getName মেথডের ওপর spy তৈরি
    spyOn(user, 'getName');

    user.getName();  // getName মেথড কল

    // নিশ্চিত করছি যে getName মেথডটি একবার কল হয়েছে
    expect(user.getName).toHaveBeenCalled();
  });
});

এখানে, spyOn() দ্বারা getName() মেথডের ওপর স্পাই করা হয়েছে এবং তারপরে এটি কল করা হয়েছে। তারপর toHaveBeenCalled() matcher দিয়ে নিশ্চিত করা হয়েছে যে, getName() মেথডটি একবার কল হয়েছে।


কেন Spies প্রয়োজন?

Spies প্রয়োজন কারণ তারা কোডের আচরণ পরীক্ষা করতে সাহায্য করে, বিশেষত যখন আপনি মক (mock) বা স্টাব (stub) ব্যবহার করতে চান। কিছু কারণ নিম্নলিখিত:

  1. নির্ভরশীলতা কমানো: যখন আপনার কোড একাধিক উপাদান বা সিস্টেমের সাথে ইন্টারঅ্যাক্ট করে, তখন আপনি এই উপাদানগুলির মধ্যে নির্ভরশীলতা কমাতে চান। স্পাই ব্যবহার করে আপনি আসল মেথড বা ফাংশনটি না কল করে শুধুমাত্র সেই আচরণ পরীক্ষা করতে পারেন।
  2. অ্যাসারশন তৈরি করা: স্পাইয়ের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে কোনো মেথড সঠিক আর্গুমেন্ট দিয়ে কল হয়েছে এবং প্রত্যাশিত ফলাফল ফিরিয়ে দিয়েছে। এর মাধ্যমে আপনি কোডের সঠিক কার্যকারিতা যাচাই করতে পারেন।
  3. অ্যাজাইল বা ইউনিট টেস্টিং: জটিল সিস্টেমে বিভিন্ন মডিউল একে অপরের সাথে ইন্টারঅ্যাক্ট করে। স্পাই ব্যবহার করে আপনি পৃথক মডিউল বা ফাংশনগুলোর আচরণ পরীক্ষার মাধ্যমে নিশ্চিত হতে পারেন যে তারা সঠিকভাবে কাজ করছে।
  4. মক ফাংশন তৈরি: স্পাই ব্যবহার করে আপনি মক ফাংশন তৈরি করতে পারেন, যা মূল কোডের আচরণকে পরিবর্তন না করে শুধুমাত্র পরীক্ষা করার জন্য কাজ করে। উদাহরণস্বরূপ, আপনি কোনো API কলের আচরণ স্পাই করতে পারেন এবং নিশ্চিত করতে পারেন যে এটি সঠিকভাবে কল হয়েছে।

Spies এর কিছু গুরুত্বপূর্ণ Matcher

  • toHaveBeenCalled(): নিশ্চিত করে যে ফাংশনটি কল হয়েছে।
  • toHaveBeenCalledTimes(n): নিশ্চিত করে যে ফাংশনটি নির্দিষ্ট সংখ্যক বার কল হয়েছে।
  • toHaveBeenCalledWith(arg1, arg2, ...): নিশ্চিত করে যে ফাংশনটি নির্দিষ্ট আর্গুমেন্ট দিয়ে কল হয়েছে।
  • toHaveReturnedWith(value): নিশ্চিত করে যে স্পাই করা ফাংশনটি একটি নির্দিষ্ট মান ফিরিয়েছে।

উদাহরণ:

describe("Spies Example", function() {
  it("should track the calls and arguments", function() {
    const user = {
      getName: function(firstName, lastName) {
        return firstName + " " + lastName;
      }
    };

    spyOn(user, 'getName').and.callThrough();  // মেথডটি স্পাই এবং আসল ফাংশন কল

    user.getName('John', 'Doe');  // getName কল

    // নিশ্চিত করছি যে getName মেথডটি সঠিক আর্গুমেন্টের সাথে কল হয়েছে
    expect(user.getName).toHaveBeenCalledWith('John', 'Doe');
    // নিশ্চিত করছি যে getName মেথডটি একবার কল হয়েছে
    expect(user.getName).toHaveBeenCalledTimes(1);
  });
});

এখানে:

  • callThrough(): এটি মূল মেথডের আচরণ চালু রাখে, যাতে এটি আসলভাবে কাজ করে।
  • toHaveBeenCalledWith(): নিশ্চিত করছে যে, getName() মেথডটি সঠিক আর্গুমেন্টের সাথে কল হয়েছে।
  • toHaveBeenCalledTimes(): নিশ্চিত করছে যে, মেথডটি একবার কল হয়েছে।

সারাংশ

JasmineJS এর Spies হল এমন একটি টুল যা ফাংশনের আচরণ এবং কলগুলি ট্র্যাক করতে ব্যবহৃত হয়। Spies ব্যবহার করে আপনি নিশ্চিত হতে পারেন যে ফাংশনটি সঠিকভাবে কল হয়েছে, সঠিক আর্গুমেন্ট পেয়েছে, এবং সঠিকভাবে কাজ করেছে। এটি টেস্টিংয়ে বিশেষভাবে সহায়ক, কারণ এটি মূল ফাংশনকে পরিবর্তন না করে কোডের আচরণ পরীক্ষা করতে সহায়তা করে।

Content added By

JasmineJS এ Spy একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে ফাংশনের কল ট্র্যাক করতে, তার আর্গুমেন্ট পরীক্ষা করতে এবং নির্দিষ্ট আচরণ নিশ্চিত করতে সহায়তা করে। এটি মূলত সেই পরিস্থিতিতে ব্যবহৃত হয় যেখানে আপনি একটি নির্দিষ্ট ফাংশন বা মেথডের কার্যকারিতা পরীক্ষা করতে চান, তবে আপনি মূল কোডে কোনো পরিবর্তন না এনে শুধুমাত্র কল ট্র্যাক করতে চান।


Spy কি?

JasmineJS এ Spy হল এমন একটি ফাংশন যা আপনার কোডের অংশ হিসেবে কল ট্র্যাক করার জন্য ব্যবহৃত হয়। এটি মূলত টেস্টের মধ্যে কোনও ফাংশন বা মেথডের কার্যক্রম নজরদারি করতে পারে, তার আর্গুমেন্ট, রিটার্ন ভ্যালু এবং কল হওয়ার সংখ্যা পরীক্ষা করতে পারে।


Spy তৈরি করার পদ্ধতি

JasmineJS এ দুটি প্রধান পদ্ধতিতে Spy তৈরি করা যায়:

  1. জেনুইন স্পাই (Spy On): এটি মূলত কোনো একটি মেথড বা ফাংশন ট্র্যাক করতে ব্যবহৃত হয়। আপনি একটি অবজেক্টের মেথডের উপর স্পাই করতে পারেন, এবং এটি মূল ফাংশনের আচরণ পরিবর্তন না করেই কল ট্র্যাক করতে সাহায্য করে।
  2. স্পাই ফাংশন (Spy Function): আপনি একটি সম্পূর্ণ নতুন স্পাই ফাংশন তৈরি করতে পারেন যা টেস্টের মধ্যে কোনো নির্দিষ্ট কার্যকলাপ সিমুলেট করে।

Spy On ব্যবহার করা

spyOn() ফাংশনটি একটি মেথডকে স্পাই করে এবং ট্র্যাক করে, তবে এটি মূল মেথডের আচরণ পরিবর্তন করে না। এটি সাধারণত কোন অবজেক্টের ফাংশন বা মেথড ট্র্যাক করতে ব্যবহার হয়।

সিনট্যাক্স:

spyOn(object, "methodName");

এখানে:

  • object: যেই অবজেক্টের মেথডকে স্পাই করতে চান।
  • methodName: যেই মেথডটি ট্র্যাক করতে চান।

উদাহরণ:

describe("Calculator operations", function() {
  it("should call the add method with correct arguments", function() {
    const calculator = {
      add: function(a, b) { return a + b; }
    };

    spyOn(calculator, 'add');  // 'add' মেথডটি স্পাই করা হলো

    calculator.add(2, 3);  // মেথড কল করা হলো

    expect(calculator.add).toHaveBeenCalled();  // মেথড কল হয়েছে কিনা তা পরীক্ষা
    expect(calculator.add).toHaveBeenCalledWith(2, 3);  // কল করার সময় সঠিক আর্গুমেন্ট দেয়া হয়েছে কিনা তা পরীক্ষা
  });
});

এখানে:

  • spyOn(calculator, 'add'): calculator অবজেক্টের add মেথডটি স্পাই করা হয়েছে।
  • calculator.add(2, 3): add মেথডটি কল করা হয়েছে।
  • expect(calculator.add).toHaveBeenCalled(): নিশ্চিত করা হয়েছে যে add মেথডটি কল হয়েছে।
  • expect(calculator.add).toHaveBeenCalledWith(2, 3): নিশ্চিত করা হয়েছে যে কল করার সময় সঠিক আর্গুমেন্ট দেয়া হয়েছে।

Spy ফাংশন তৈরি করা

JasmineJS এ আপনি একটি স্পাই ফাংশন তৈরি করতে পারেন যা একটি নতুন ফাংশনের মতো কাজ করবে এবং কল হওয়া ট্র্যাক করবে। এর মাধ্যমে আপনি যেকোনো ফাংশনের আচরণ পরীক্ষায় সহায়তা করতে পারেন।

সিনট্যাক্স:

const spyFunction = jasmine.createSpy("functionName");

উদাহরণ:

describe("Spy function example", function() {
  it("should track function calls", function() {
    const spyFunc = jasmine.createSpy("spyFunc");  // স্পাই ফাংশন তৈরি

    spyFunc(1, 2);  // ফাংশন কল করা হলো
    spyFunc(3, 4);  // আবার কল করা হলো

    expect(spyFunc).toHaveBeenCalled();  // ফাংশনটি কল হয়েছে কিনা তা পরীক্ষা
    expect(spyFunc).toHaveBeenCalledWith(1, 2);  // সঠিক আর্গুমেন্ট দিয়ে কল হয়েছে কিনা তা পরীক্ষা
    expect(spyFunc).toHaveBeenCalledTimes(2);  // ফাংশনটি দুইবার কল হয়েছে কিনা তা পরীক্ষা
  });
});

এখানে:

  • jasmine.createSpy(): একটি নতুন স্পাই ফাংশন তৈরি করা হয়েছে যা ফাংশনটির কল ট্র্যাক করবে।
  • expect(spyFunc).toHaveBeenCalled(): নিশ্চিত করা হয়েছে যে স্পাই ফাংশনটি কল হয়েছে।
  • expect(spyFunc).toHaveBeenCalledWith(1, 2): নিশ্চিত করা হয়েছে যে সঠিক আর্গুমেন্ট দিয়ে কল করা হয়েছে।
  • expect(spyFunc).toHaveBeenCalledTimes(2): নিশ্চিত করা হয়েছে যে ফাংশনটি মোট দুইবার কল হয়েছে।

Spy এর সাথে Return Value নির্ধারণ করা

Spy দিয়ে আপনি return value বা কাস্টম আচরণও সেট করতে পারেন। এতে আপনি স্পাই ফাংশনের মাধ্যমে কাস্টম রিটার্ন ভ্যালু অথবা ফাংশন কলের পরে নির্দিষ্ট আচরণ কনফিগার করতে পারেন।

উদাহরণ:

describe("Spy return value example", function() {
  it("should return a custom value when called", function() {
    const spyFunc = jasmine.createSpy("spyFunc").and.returnValue(10);  // স্পাই ফাংশন তৈরি এবং কাস্টম রিটার্ন ভ্যালু সেট করা

    const result = spyFunc();

    expect(spyFunc).toHaveBeenCalled();  // স্পাই ফাংশন কল হয়েছে কিনা তা পরীক্ষা
    expect(result).toBe(10);  // কাস্টম রিটার্ন ভ্যালু ১০ এসেছে কিনা তা পরীক্ষা
  });
});

এখানে:

  • and.returnValue(10): স্পাই ফাংশনের রিটার্ন ভ্যালু ১০ হিসেবে সেট করা হয়েছে।
  • expect(result).toBe(10): রিটার্ন ভ্যালু যাচাই করা হয়েছে যে এটি ১০ কিনা।

Spy এর সাথে Throwing Error নির্ধারণ

আপনি স্পাই ফাংশন দিয়ে Error ফেলা (throw) বা exception সেট করতে পারেন। এর মাধ্যমে আপনি একটি ফাংশনের ত্রুটি মোকাবেলা এবং পরীক্ষা করতে পারবেন।

উদাহরণ:

describe("Spy throwing error example", function() {
  it("should throw an error when called", function() {
    const spyFunc = jasmine.createSpy("spyFunc").and.throwError("Something went wrong");

    expect(spyFunc).toThrowError("Something went wrong");  // স্পাই ফাংশনটি ত্রুটি ফেলবে কিনা তা পরীক্ষা
  });
});

এখানে:

  • and.throwError("Something went wrong"): স্পাই ফাংশনটি কল হওয়ার সাথে সাথে একটি ত্রুটি (error) ফেলবে।
  • expect(spyFunc).toThrowError("Something went wrong"): নিশ্চিত করা হয়েছে যে স্পাই ফাংশনটি সঠিক ত্রুটি ফেলছে।

সারাংশ

JasmineJS এর Spy ফিচারটি একটি শক্তিশালী টেস্টিং টুল, যা দিয়ে আপনি ফাংশনের কল ট্র্যাক করতে, তার আর্গুমেন্ট পরীক্ষা করতে এবং ফাংশনের আচরণ কাস্টমাইজ করতে পারেন। spyOn() মেথডটি অবজেক্টের মেথড স্পাই করতে ব্যবহৃত হয়, এবং jasmine.createSpy() ব্যবহার করে আপনি কাস্টম স্পাই ফাংশন তৈরি করতে পারেন।

এই টুলটি বিশেষভাবে দরকারি যখন আপনি মডিউল বা ফাংশনের আচরণ পরীক্ষা করতে চান, কিন্তু তার বাস্তব কার্যকারিতা পরিবর্তন না করে শুধু তার কল ট্র্যাক করতে চান।

Content added By

JasmineJS এ Spies একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে ফাংশনের arguments (আর্গুমেন্ট) এবং return values (ফলাফল) পরীক্ষা করতে সহায়তা করে। একটি Spy মূলত একটি "fake" ফাংশন তৈরি করে, যা আসল ফাংশনটি কল করার সময় তার কার্যকারিতা বা আচরণ সিমুলেট করে এবং তার আর্গুমেন্ট বা রিটার্ন ভ্যালু পরীক্ষা করার সুযোগ দেয়।

Spies সাধারণত টেস্টিংয়ের সময় তখন ব্যবহার করা হয় যখন আপনি চান ফাংশনটি আসলে কাজ করছে কিনা, এবং যে আর্গুমেন্টগুলি তা গ্রহণ করছে বা যে রিটার্ন ভ্যালু তা প্রদান করছে তা সঠিক কিনা।


Jasmine Spies এর মৌলিক ব্যবহার

JasmineJS এ স্পাই ব্যবহার করতে হলে spyOn() মেথড ব্যবহার করতে হয়। এটি একটি ফাংশনকে স্পাই করে এবং তার কার্যকারিতা পরীক্ষা করার জন্য সেই ফাংশনের আর্গুমেন্ট এবং রিটার্ন ভ্যালু ট্র্যাক করে।


spyOn() মেথড

spyOn() মেথডটি একটি ফাংশনকে স্পাই করতে ব্যবহৃত হয়। এটি ঐ ফাংশনের আচরণ ট্র্যাক করে, যেমন কিভাবে ফাংশনটি কল হয়েছে, কি আর্গুমেন্ট পাস করা হয়েছে, এবং ফাংশনটি কি রিটার্ন ভ্যালু প্রদান করেছে।

spyOn(object, 'methodName');

এখানে:

  • object: যেই অবজেক্টে ফাংশনটি অবস্থিত (যেমন কোনো ক্লাস বা মডিউল)।
  • methodName: যেই মেথড/ফাংশনটি আপনি স্পাই করতে চান।

ফাংশনের আর্গুমেন্ট যাচাই

JasmineJS এ স্পাই ব্যবহার করে আপনি ফাংশনের আর্গুমেন্ট চেক করতে পারেন। spyOn() মেথডটি ফাংশনটি কল হওয়া সময় তার আর্গুমেন্ট সংগ্রহ করে রাখে, এবং এরপর আপনি সেই আর্গুমেন্টগুলো যাচাই করতে পারেন।

উদাহরণ:

describe("Function arguments check", function() {
  it("should verify the arguments passed to the function", function() {
    const obj = {
      greet: function(name, age) {
        return `Hello, ${name}, Age: ${age}`;
      }
    };

    // spyOn() দ্বারা greet ফাংশনটি স্পাই করা হচ্ছে
    spyOn(obj, 'greet');

    // ফাংশনটি কল করা হচ্ছে
    obj.greet('John', 30);

    // আর্গুমেন্ট যাচাই
    expect(obj.greet).toHaveBeenCalledWith('John', 30);
  });
});

এখানে:

  • spyOn(obj, 'greet'): greet ফাংশনটি স্পাই করা হয়েছে।
  • expect(obj.greet).toHaveBeenCalledWith('John', 30): চেক করা হয়েছে যে greet ফাংশনটি 'John' এবং 30 আর্গুমেন্ট নিয়ে কল হয়েছে কি না।

ফাংশনের রিটার্ন ভ্যালু যাচাই

JasmineJS এ স্পাই ব্যবহার করে আপনি ফাংশনের return value (ফলাফল) চেক করতে পারেন। স্পাই মেথডটি আপনাকে ঐ ফাংশনের রিটার্ন ভ্যালু ট্র্যাক করতে এবং পরবর্তীতে যাচাই করতে সহায়তা করে।

উদাহরণ:

describe("Function return value check", function() {
  it("should verify the return value of the function", function() {
    const obj = {
      multiply: function(a, b) {
        return a * b;
      }
    };

    // spyOn() দ্বারা multiply ফাংশনটি স্পাই করা হচ্ছে
    spyOn(obj, 'multiply').and.returnValue(10);

    // ফাংশনটি কল করা হচ্ছে
    const result = obj.multiply(2, 5);

    // রিটার্ন ভ্যালু যাচাই
    expect(result).toBe(10);
  });
});

এখানে:

  • spyOn(obj, 'multiply').and.returnValue(10): multiply ফাংশনটি স্পাই করা হয়েছে এবং সেটি নির্দিষ্ট একটি রিটার্ন ভ্যালু (10) রিটার্ন করবে।
  • expect(result).toBe(10): চেক করা হয়েছে যে multiply ফাংশনটি 10 রিটার্ন করেছে।

আর্গুমেন্ট এবং রিটার্ন ভ্যালু একসাথে যাচাই

JasmineJS এ আপনি স্পাই ব্যবহার করে একই সময়ে ফাংশনের আর্গুমেন্ট এবং রিটার্ন ভ্যালু উভয়ই যাচাই করতে পারেন।

উদাহরণ:

describe("Function arguments and return value check", function() {
  it("should verify both the arguments and return value", function() {
    const obj = {
      divide: function(a, b) {
        if (b === 0) {
          return "Cannot divide by zero";
        }
        return a / b;
      }
    };

    // spyOn() দ্বারা divide ফাংশনটি স্পাই করা হচ্ছে
    spyOn(obj, 'divide');

    // ফাংশনটি কল করা হচ্ছে
    const result1 = obj.divide(10, 2);
    const result2 = obj.divide(10, 0);

    // আর্গুমেন্ট যাচাই
    expect(obj.divide).toHaveBeenCalledWith(10, 2);
    expect(obj.divide).toHaveBeenCalledWith(10, 0);

    // রিটার্ন ভ্যালু যাচাই
    expect(result1).toBe(5);
    expect(result2).toBe("Cannot divide by zero");
  });
});

এখানে:

  • expect(obj.divide).toHaveBeenCalledWith(10, 2) এবং expect(obj.divide).toHaveBeenCalledWith(10, 0): ফাংশনটি সঠিক আর্গুমেন্টের সাথে কল হয়েছে কিনা তা যাচাই করা হচ্ছে।
  • expect(result1).toBe(5) এবং expect(result2).toBe("Cannot divide by zero"): রিটার্ন ভ্যালু চেক করা হচ্ছে।

Jasmine এর Spies এর অন্যান্য বৈশিষ্ট্য

  1. and.callThrough(): এটি স্পাই করা ফাংশনকে আসল ফাংশন হিসেবে কার্যকর করতে সহায়তা করে। অর্থাৎ, ফাংশনটি আসলেই কাজ করবে এবং তার আর্গুমেন্ট এবং রিটার্ন ভ্যালু ট্র্যাক করা হবে।

    spyOn(obj, 'method').and.callThrough();
    
  2. and.callFake(): এটি স্পাই করা ফাংশনের জন্য একটি fake function (কৃত্রিম ফাংশন) সেট করতে ব্যবহৃত হয়, যা ঐ ফাংশনের আসল কার্যকারিতা পরিবর্তন করতে পারে।

    spyOn(obj, 'method').and.callFake(function() {
      return 'Fake result';
    });
    
  3. and.returnValue(): এটি স্পাই করা ফাংশনের জন্য একটি নির্দিষ্ট রিটার্ন ভ্যালু প্রদান করে।

    spyOn(obj, 'method').and.returnValue(10);
    
  4. and.throwError(): এটি স্পাই করা ফাংশনের জন্য একটি ত্রুটি (error) ছুঁড়তে ব্যবহৃত হয়।

    spyOn(obj, 'method').and.throwError('An error occurred');
    

সারাংশ

JasmineJS এ Spies একটি গুরুত্বপূর্ণ টুল যা আপনাকে ফাংশনের আর্গুমেন্ট এবং রিটার্ন ভ্যালু পরীক্ষা করতে সহায়তা করে। spyOn() মেথডের মাধ্যমে আপনি ফাংশন স্পাই করতে পারেন, এবং toHaveBeenCalledWith() বা toBe() এর মতো matchers ব্যবহার করে আর্গুমেন্ট এবং রিটার্ন ভ্যালু যাচাই করতে পারেন। এছাড়াও, Jasmine এর callThrough(), callFake(), এবং returnValue() মেথডের মাধ্যমে স্পাইয়ের আচরণ নিয়ন্ত্রণ করা যায়, যা টেস্টিংয়ের ক্ষেত্রে অত্যন্ত কার্যকরী।

Content added By

JasmineJS এ spying একটি শক্তিশালী ফিচার, যা আপনাকে আপনার কোডের কোনো ফাংশনের আচরণ ট্র্যাক করতে এবং সেগুলোর উপর নিয়ন্ত্রণ পেতে সাহায্য করে। Jasmine এর spyOn() ফাংশনটি একটি মেথড বা ফাংশনকে "স্পাই" করার জন্য ব্যবহৃত হয়, অর্থাৎ, এটি ফাংশনের কল ট্র্যাক করে এবং আপনি সেই ফাংশনের ফলাফল এবং আউটপুট পরীক্ষা করতে পারেন।

JasmineJS এ Spy এর সাথে বিভিন্ন পদ্ধতি (methods) ব্যবহার করা হয়, যেমন callThrough(), callFake(), এবং returnValue(), যা স্পাইয়ের আচরণ নিয়ন্ত্রণ করতে সহায়তা করে। নিচে এই ফিচারগুলোর ব্যবহার বিস্তারিতভাবে আলোচনা করা হলো।


spyOn() ফাংশন

spyOn() ফাংশনটি আপনার কোডের কোনো ফাংশন বা মেথডের উপর স্পাই (spy) তৈরি করতে ব্যবহৃত হয়। এটি মূল ফাংশনটিকে ট্র্যাক করে, যাতে আপনি দেখতে পারেন এটি কখন এবং কীভাবে কল হচ্ছে।

spyOn() এর গঠন:

spyOn(object, 'methodName');

এখানে:

  • object: সেই অবজেক্ট যেখানে মেথডটি রয়েছে।
  • methodName: সেই মেথড বা ফাংশনের নাম যেটি আপনি স্পাই করতে চান।

উদাহরণ:

describe("spyOn example", function() {
  it("should spy on a method", function() {
    const user = {
      greet: function(name) {
        return "Hello, " + name;
      }
    };

    spyOn(user, 'greet');  // 'greet' মেথডটিকে স্পাই করা হচ্ছে
    user.greet("Alice");

    expect(user.greet).toHaveBeenCalled();  // নিশ্চিত করছে যে greet মেথডটি কল হয়েছে
  });
});

এখানে spyOn() ফাংশনটি user.greet মেথডটিকে স্পাই করছে এবং পরবর্তীতে যাচাই করছে যে সেটি কল হয়েছে কিনা।


callThrough()

callThrough() পদ্ধতিটি স্পাই করা মেথডটি তার আসল আচরণে ফিরে যায়। অর্থাৎ, এটি স্পাই করা মেথডটির আসল কার্যকারিতা (functionality) চালু রাখে, কিন্তু একই সঙ্গে স্পাইয়ের ট্র্যাকিংও করে।

ব্যবহার:

spyOn(object, 'methodName').and.callThrough();

উদাহরণ:

describe("callThrough example", function() {
  it("should call the original function", function() {
    const user = {
      greet: function(name) {
        return "Hello, " + name;
      }
    };

    spyOn(user, 'greet').and.callThrough();  // আসল greet মেথডটিকে কল থ্রু করা হচ্ছে
    const message = user.greet("Alice");

    expect(user.greet).toHaveBeenCalled();  // নিশ্চিত করছে যে greet মেথডটি কল হয়েছে
    expect(message).toBe("Hello, Alice");  // আসল মেথড থেকে পাওয়া আউটপুট চেক করছে
  });
});

এখানে callThrough() নিশ্চিত করছে যে greet মেথডটি আসল কার্যকারিতা অনুযায়ী কাজ করছে এবং একই সঙ্গে এটি স্পাইও করছে।


callFake()

callFake() পদ্ধতিটি স্পাই করা মেথডের কার্যকারিতা পরিবর্তন করে। এটি আপনাকে একটি কাস্টম ফাংশন বা মক ফাংশন ব্যবহার করার সুযোগ দেয়, যা মূল মেথডটির পরিবর্তে চালানো হয়।

ব্যবহার:

spyOn(object, 'methodName').and.callFake(function() {
  // কাস্টম ফাংশন
});

উদাহরণ:

describe("callFake example", function() {
  it("should use a fake function", function() {
    const user = {
      greet: function(name) {
        return "Hello, " + name;
      }
    };

    spyOn(user, 'greet').and.callFake(function(name) {
      return "Hi, " + name;  // মূল greet মেথডের পরিবর্তে ফেক ফাংশন ব্যবহার হচ্ছে
    });

    const message = user.greet("Alice");

    expect(user.greet).toHaveBeenCalled();  // নিশ্চিত করছে যে greet মেথডটি কল হয়েছে
    expect(message).toBe("Hi, Alice");  // ফেক ফাংশনের আউটপুট চেক করছে
  });
});

এখানে callFake() ফাংশনটি আসল greet মেথডের পরিবর্তে একটি কাস্টম ফাংশন ব্যবহার করছে, যার মাধ্যমে আপনি মেথডটির আচরণ পুরোপুরি নিয়ন্ত্রণ করতে পারেন।


returnValue()

returnValue() পদ্ধতিটি স্পাই করা মেথড থেকে একটি কাস্টম রিটার্ন ভ্যালু প্রদান করে। এটি আপনাকে স্পাই করা ফাংশনের আউটপুট নিয়ন্ত্রণ করতে সাহায্য করে, যাতে আপনি একটি নির্দিষ্ট মান ফেরত দিতে পারেন।

ব্যবহার:

spyOn(object, 'methodName').and.returnValue(value);

উদাহরণ:

describe("returnValue example", function() {
  it("should return a specific value", function() {
    const user = {
      greet: function(name) {
        return "Hello, " + name;
      }
    };

    spyOn(user, 'greet').and.returnValue("Hello, Mocked World!");  // কাস্টম রিটার্ন ভ্যালু
    const message = user.greet("Alice");

    expect(user.greet).toHaveBeenCalled();  // নিশ্চিত করছে যে greet মেথডটি কল হয়েছে
    expect(message).toBe("Hello, Mocked World!");  // নির্দিষ্ট কাস্টম রিটার্ন ভ্যালু চেক করছে
  });
});

এখানে returnValue() ফাংশনটি greet মেথডের আউটপুটকে কাস্টম ভ্যালু "Hello, Mocked World!" দিয়ে প্রতিস্থাপন করেছে।


সারাংশ

JasmineJS এর spying এবং Matchers ব্যবহারের মাধ্যমে আপনি সহজেই কোনো ফাংশনের আচরণ ট্র্যাক এবং নিয়ন্ত্রণ করতে পারেন। spyOn() দিয়ে স্পাই শুরু করা হয়, এবং তারপরে আপনি callThrough(), callFake(), এবং returnValue() এর মাধ্যমে স্পাইয়ের আচরণ পরিবর্তন বা নিয়ন্ত্রণ করতে পারেন:

  • callThrough(): স্পাই করা ফাংশনটি তার আসল আচরণ ধরে রেখে কল হয়।
  • callFake(): স্পাই করা ফাংশনটির পরিবর্তে একটি কাস্টম ফাংশন বা মক ফাংশন ব্যবহার করা হয়।
  • returnValue(): স্পাই করা ফাংশন থেকে একটি কাস্টম রিটার্ন ভ্যালু প্রদান করা হয়।

এই ফিচারগুলো জাভাস্ক্রিপ্ট টেস্টিংয়ে মকিং এবং স্টাবিংয়ের কাজকে অনেক সহজ এবং শক্তিশালী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...